import type { UserConfig, ConfigEnv } from 'vite';
import { loadEnv } from 'vite';
import path from 'path';

import { createProxy, wrapperEnv, createVitePlugins } from './build/index';
// import childProcess  from 'child_process';
// let getCPUSerialNumber=()=> {
//   let res = ""
//   try {
//       let cmd = `wmic CPU get ProcessorID`;    //cmd里获取cpu序列号的指令
//       res = childProcess.execSync(cmd);    //输出指令返回
//   } catch (e) {
//       res = childProcess.execSync(cmd);
//       console.error("获取CPU序列号错误！")
//   }
//   return res.toString().split('\n');
// }
// console.log(getCPUSerialNumber(),'getCPUSerialNumber');
export default ({ command, mode }: ConfigEnv): UserConfig => {
  const root = process.cwd();
  const env = loadEnv(mode, root);
  const viteEnv = wrapperEnv(env);
  const { VITE_PORT, VITE_PROXY, VITE_DROP_CONSOLE, VITE_PUBLIC_PATH } = wrapperEnv(env);

  const isBuild = command === 'build';

  return {
    root,
    base: VITE_PUBLIC_PATH,
    // vite插件是在vite不同的声明周期做不同的事情
    plugins: [...createVitePlugins(viteEnv, isBuild)],

    resolve: {
      alias: {
        'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
        '@': path.resolve(__dirname, 'src'),
        '/#/': path.resolve(__dirname, 'types'),
      },
    },

    server: {
      host: '0.0.0.0',
      port: VITE_PORT,
      proxy: createProxy(VITE_PROXY),
    },
    css: {
      preprocessorOptions: {
        less: {
          // 支持Less内联JavaScript。
          javascriptEnabled: true,
          //可以使用 100/2px --math="always"
          math: "always",
        },
      },
      // css代码溯源
      devSourcemap: true,
      // postcss后处理器  less sass预处理后在处理的处理器   postcssPresetEnv 插件  css语法降级 
      postcss: {
        plugins: [

        ],
      }
    },
    build: {
      minify: 'terser',   // 
      target: 'es2015', //设置最终构建的浏览器兼容目标
      // outDir: 'dist',
      outDir: 'dist',// 构建输出目录名字
      assetsDir: 'assets', //assets 文件名字
      terserOptions: {
        compress: {
          keep_infinity: true,
          // Used to delete console in production environment
          drop_console: VITE_DROP_CONSOLE,
        },
      },
      emptyOutDir: true,// 是否清空输出目录  默认是true
      chunkSizeWarningLimit: 2000,
      assetsInlineLimit: 2000, // 图片大于2000k转base64
      rollupOptions: { //rollup 的配置
        // 配置多入口文件
        // input: {  
        //   login: path.resolve(__dirname, 'login.html'),  
        //   index: path.resolve(__dirname, 'index.html'),
        // },
        output: {
          manualChunks(id?: any) {
            // 分包策略  浏览器静态资源名字相同不会重新加载
            if (id?.includes('node_modules')) {
              // 
              return id?.toString().split('node_modules/')[1].split('/')[0].toString();
            }
          },
          // 打包后的名字修改， hash 随机数字 ，name文件名字，extname拓展名
          // assetFileNames: (assetInfo) => {
          //   console.log(,assetInfo);
          //  return '[hash].lele[name].[extname]';  
          // }
        },

      },
    },
    // optimizeDeps: {
    //   include: ['ant-design-vue/es/locale/zh_CN', 'ant-design-vue/es/locale/en_US'],
    // },
    optimizeDeps: {
      include: [
        // 'ant-design-vue/es/locale/zh_CN',
        // 'ant-design-vue/es/locale/en_US',

      ],
    },
  };
};
